package com.yusvn.scm.common.kit;

import java.util.HashMap;

import com.jfinal.json.Json;
import com.yusvn.scm.common.constant.Const;


/**
 * 接口返回结果对象
 */
public class RetKit extends HashMap<String, Object> {
    private static final long serialVersionUID = 1L;
    private static final String CODE_NAME = "code";  // 状态码字段名称
    private static final String MSG_NAME = "msg";  // 状态信息字段名称
    private static final String DATA_NAME = "data";  // 数据字段名称
    private static final int DEFAULT_OK_CODE = Const.RESULT_OK_CODE;  // 默认成功码0
    private static final int DEFAULT_ERROR_CODE = Const.RESULT_ERROR_CODE;  // 默认失败码1
    private static final String DEFAULT_OK_MSG = "操作成功";  // 默认成功msg
    private static final String DEFAULT_ERROR_MSG = "操作失败";  // 默认失败msg
    
    private static final String COUNT_NAME = "count";  // 数据总行数 (如果是分页查询，需要设置数据总行数)
    
    private RetKit() {
    }

    /**
     * 返回成功
     */
    public static RetKit ok() {
        return ok(null);
    }

    /**
     * 返回成功
     */
    public static RetKit ok(String message) {
        return ok(DEFAULT_OK_CODE, message);
    }

    /**
     * 返回成功
     */
    public static RetKit ok(int code, String message) {
        if (message == null) message = DEFAULT_OK_MSG;
        RetKit jsonResult = new RetKit();
        jsonResult.put(CODE_NAME, code);
        jsonResult.put(MSG_NAME, message);
        return jsonResult;
    }
    
    public static RetKit ok(String key, Object object) {
    	return ok().put(key, object);
    }
	
	/**
	 * 判断是否返回成功
	 */
	public boolean isOk() {
		Object code = get(CODE_NAME);  //getCode()
		try {
			if (code.equals(DEFAULT_OK_CODE)) {
				return true;
			}else {
				return false;
			}
		} catch (Exception e) {
			e.printStackTrace();
			return false;
		}
	}
	
	/**
	 * 判断是否返回失败
	 * @return
	 */
	public boolean isFail() {
		return !isOk();
	}

    /**
     * 返回失败
     */
    public static RetKit fail() {
        return fail(null);
    }

    /**
     * 返回失败
     */
    public static RetKit fail(String message) {
        return fail(DEFAULT_ERROR_CODE, message);
    }

    /**
     * 返回失败
     */
    public static RetKit fail(String key, Object object) {
        return fail().put(key, object);
    }
    
    /**
     * 返回失败
     */
    public static RetKit fail(int code, String message) {
        if (message == null) message = DEFAULT_ERROR_MSG;
        return ok(code, message);
    }
    
    /**
     * 返回失败，没有权限
     */
	public static RetKit noAuth() {
		return fail("没有权限");
	}

    public RetKit setCode(Integer code) {
        return put(CODE_NAME, code);
    }

    public RetKit setMsg(String message) {
        return put(MSG_NAME, message);
    }

    public RetKit setCount(int count) {
        return put(COUNT_NAME, count);
    }
    
    public int getCount() {
        Object o = get(COUNT_NAME);
        return o == null ? null : Integer.parseInt(o.toString());
    }

    public Integer getCode() {
        Object o = get(CODE_NAME);
        return o == null ? null : Integer.parseInt(o.toString());
    }

    public String getMsg() {
        Object o = get(MSG_NAME);
        return o == null ? null : o.toString();
    }

    public Object getData() {
        return get(DATA_NAME);
    }

	/**
	 * 设置数据，默认名称为'data'
	 * @param object
	 * @return
	 */
	public RetKit setData(Object object) {
		return set(DATA_NAME, object);
	}
	
	/**
	 * 设置数据，自定义名称
	 * @param name
	 * @param object
	 * @return
	 */
	public RetKit setData(String name, Object object) {
		return set(name, object);
	}

    @Override
    public RetKit put(String key, Object object) {
        if (key != null && object != null) super.put(key, object);
        return this;
    }

	public RetKit set(String key, Object value) {
		super.put(key, value);
		return this;
	}
	
	public String toJson() {
		return Json.getJson().toJson(this);
	}
	
}
